from baike_spider import url_manager,html_downloader,html_parser,html_outputer

class SpiderMain(object):

    def __init__(self):
        self.urls = url_manager.UrlManager()
        self.downloader = html_downloader.HtmlDownloader()
        self.parser = html_parser.HtmlParser()
        self.outputer = html_outputer.HtmlOutputer()

    def craw(self,root_url):
        count = 1       #用来记录当前爬取的是第几个url
        self.urls.add_new_url(root_url)
        while self.urls.has_new_url():     #如果有待爬取url
            try:        #异常处理
                new_url = self.urls.get_new_url()      #取出一个url
                print('craw %d : %s' % (count,new_url))
                html_cont = self.downloader.download(new_url)       #下载页面
                new_urls,new_data = self.parser.parse(new_url,html_cont)        #进行界面的解析，得到新的url和数据
                self.urls.add_new_urls(new_urls)     #将新的url补充到url管理器
                self.outputer.collect_data(new_data)        #进行数据的收集

                if count == 10000:       #爬取一千个url的数据
                    break
                count = count+1
            except:
                print('craw failed')

        self.outputer.output_html()








if __name__ == '__main__':
    root_url = "https://baike.baidu.com/item/Python/407313?fr=aladdin"
    obj_spider = SpiderMain()
    obj_spider.craw(root_url)
